#!/usr/bin/env python3
#########################################################################
# 作者：gfdgd xi
# 版本：1.0.0
# 基于 Python3 的 tkinter 构建
# Gitee：https://gitee.com/gfdgd-xi/remove-windows-password-patch-setup-linux
#########################################################################
#################
# 引入所需的库
#################
import tkinter as tk
import tkinter.filedialog as dialog
import tkinter.messagebox as messagebox
import traceback
import shutil
import os
import webbrowser

###################
# 程序所需事件
###################
def Check():
    labelText2.set("正在检查文件完整性……")
    if os.path.exists("sethc.exe"):
        labelText2.set("检查完毕，无文件丢失！")
    else:
        labelText2.set("检查完毕，有部分文件出现丢失！")
        messagebox.showinfo(title="错误", message="检查完毕，有部分文件出现丢失！")
    return os.path.exists("sethc.exe")

def Browser1():
    path = dialog.askdirectory(title="选择 System32 目录")
    if path != "":
        entryText1.set(path)

def InstallDelWindowsPasswordPack():
    try:
        system32Path = entry1.get()
        if system32Path == "":
            messagebox.showerror(title="错误", message="System32 文件夹路径不能为空！")
            return
        if not Check():
            return
        labelText2.set("检查是否已经安装 “Windows 密码破解补丁“……")
        if os.path.exists(system32Path + "/sethc-other.exe"):
            messagebox.showinfo(title="提示", message="此 Windows 已经安装了“Windows 密码删除补丁”")
            return
        labelText2.set("正在安装 “Windows 密码破解补丁“……")
        shutil.copyfile(system32Path + "/sethc.exe", system32Path + "/sethc-other.exe")
        shutil.copyfile("sethc.exe", system32Path + "/sethc.exe")
        messagebox.showinfo(title="提示", message="安装成功！")
        labelText2.set("安装成功！")
    except:
        messagebox.showerror(title="错误", message=traceback.format_exc())
        print("#######################################")
        print("Error:")
        print(traceback.format_exc())

def RemoveDelWindowsPasswordPack():
    try:
        system32Path = entry1.get()
        if system32Path == "":
            messagebox.showerror(title="错误", message="System32 文件夹路径不能为空！")
            return
        if not Check():
            return
        labelText2.set("检查是否已经安装 “Windows 密码破解补丁“……")
        if not os.path.exists(system32Path + "/sethc-other.exe"):
            messagebox.showinfo(title="提示", message="此 Windows 未安装“Windows 密码删除补丁”")
            return
        labelText2.set("正在卸载 “Windows 密码破解补丁“……")
        shutil.copyfile(system32Path + "/sethc-other.exe", system32Path + "/sethc.exe")
        os.remove(system32Path + "/sethc-other.exe")
        labelText2.set("卸载成功！")
        messagebox.showinfo(title="提示", message="卸载成功！")
    except:
        messagebox.showerror(title="错误", message=traceback.format_exc())
        print("#######################################")
        print("Error:")
        print(traceback.format_exc())

# 显示“关于这个程序”窗口
def about_this_program():
    messagebox.showinfo(title="关于这个程序", message="一个基于 Python3 的 tkinter 制作的删除 Windows 密码补丁安装器 for Linux\n版本：1.0.0\n适用平台：Linux\ntkinter 版本：" + str(tk.TkVersion) + "\n程序官网：https://gitee.com/gfdgd-xi/remove-windows-password-patch-setup-linux")

# 显示“提示”窗口
def helps():
    messagebox.showinfo(title="提示", message="提示：\n1、无")

def OpenProgramURL():
    webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/remove-windows-password-patch-setup-linux")

###########################
# 窗口创建
###########################
window = tk.Tk()
window.title("删除 Windows 密码补丁安装器 for Linux")
# 创建所需变量
entryText1 = tk.StringVar()
labelText2 = tk.StringVar()
# 设置所需变量的值
labelText2.set("暂无操作！")
# 创建所需控件
label1 = tk.Label(window, text="System32 文件夹所在路径：")
label2 = tk.Label(window, textvariable=labelText2)
entry1 = tk.Entry(window, width=100, textvariable=entryText1)
button1 = tk.Button(window, command=Browser1, text="选择 System32 目录")
button2 = tk.Button(window, command=Check, text="检查程序完整性……")
button3 = tk.Button(window, command=InstallDelWindowsPasswordPack, text="安装 Windows 密码破解补丁……")
button4 = tk.Button(window, command=RemoveDelWindowsPasswordPack, text="卸载 Windows 密码破解补丁……")
# 设置菜单栏
menu = tk.Menu(window)
programmenu = tk.Menu(menu, tearoff=0)  # 设置“程序”菜单栏
menu.add_cascade(label="程序", menu=programmenu)
programmenu.add_command(label="退出程序", command=window.quit)  # 设置“退出程序”项
help = tk.Menu(menu, tearoff=0)  # 设置“帮助”菜单栏
menu.add_cascade(label="帮助", menu=help)
help.add_command(label="小提示", command=helps)  # 设置“小提示”项
help.add_separator()  # 设置分界线
help.add_command(label="程序官网", command=OpenProgramURL)  # 设置“小提示”项
help.add_separator()  # 设置分界线
help.add_command(label="关于这个程序", command=about_this_program)  # 设置“关于这个程序”项
window.config(menu=menu)  # 显示菜单栏
# 添加控件
entry1.grid(row=0, column=1)
label1.grid(row=0, column=0)
label2.grid(row=1, column=0, columnspan=3)
button1.grid(row=0, column=2)
button2.grid(row=2, column=0, columnspan=3)
button3.grid(row=3, column=1, columnspan=3)
button4.grid(row=4, column=0, columnspan=3)
window.mainloop()